/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package beans;

import database_beans.PlanAngazovanja;
import database_beans.Predmet;
import database_beans.Zaposleni;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import server.Util;

/**
 *
 * @author stefan
 */
@ManagedBean(name = "planCtrl")
@RequestScoped
public class PlanAngazovanjaBean implements Serializable{
    
    private ArrayList<Predmet> selectedPredmeti = new ArrayList<Predmet>();
    
    private ArrayList<Zaposleni> selectedZaposleni = new ArrayList<Zaposleni>();
    
     private ArrayList<Predmet> predmetList;
     
     private String selectedPredmetString;
     
     private Predmet selectedPredmet;
     
    private Map<Zaposleni,String> zaposleni = new HashMap<Zaposleni, String>(); 
    
    private Map<Predmet,String> predmeti; 
    
    private String grupa;
    private boolean imaPredmet;
    /**
     * Creates a new instance of PlanAngazovanja
     */
    public PlanAngazovanjaBean() {
    }
    
    @PostConstruct
    public void init(){
        loadZaposleni();
        loadPredmeti();
    }

    private void loadZaposleni() {
        Session session = Util.getSesion();
        Transaction t = session.beginTransaction();
        try{
            Criteria c = session.createCriteria(Zaposleni.class);
            ArrayList<Zaposleni> list = ( ArrayList<Zaposleni>)c.list();
            for(Zaposleni z : list){
                zaposleni.put(z, z.toString());
            }
            t.commit();
        }catch(Exception e){
            t.rollback();
            e.printStackTrace();
        }
    }

    private void loadPredmeti() {
         Session session = Util.getSesion();
        Transaction t = session.beginTransaction();
        try{
            Criteria c = session.createCriteria(Predmet.class);
            predmetList = (ArrayList<Predmet>)c.list();
//            ArrayList<Predmet> list = ( ArrayList<Predmet>)c.list();
//            for(Predmet z : list){
//                predmeti.put(z, z.toString());
//            }
            
            t.commit();
        }catch(Exception e){
            t.rollback();
            e.printStackTrace();
        }
    }
    
    public void snimi(){
        if(imaPredmet && !selectedZaposleni.isEmpty()){
         Session session = Util.getSesion();
        Transaction t = session.beginTransaction();
        try{
            for(Zaposleni z : selectedZaposleni){
                PlanAngazovanja plan = new PlanAngazovanja();
                plan.setGrupa(grupa);
                plan.setPredmet(selectedPredmet);
                plan.setZaposleni(z);
                session.save(plan);
            }
            t.commit();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Snimanje uspesno!"));
        }catch(Exception e){
            t.rollback();
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Greska!!! Snimanje neuspesno!"));
        }
        }else{
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Morate odabrati predmet i zaposlene!"));
        }
    }
    
    public void onChangePredmet() {
        selectedPredmet = new Predmet();
        imaPredmet = false;
        if (!"".equals(selectedPredmetString)) {
            for (Predmet p : predmetList) {
                if (selectedPredmetString.equals(p.getNaziv())) {
                    selectedPredmet = p;
                    imaPredmet = true;
                    break;
                }
            }
        }
    }

    public ArrayList<Predmet> getSelectedPredmeti() {
        return selectedPredmeti;
    }

    public void setSelectedPredmeti(ArrayList<Predmet> selectedPredmeti) {
        this.selectedPredmeti = selectedPredmeti;
    }

    public ArrayList<Zaposleni> getSelectedZaposleni() {
        return selectedZaposleni;
    }

    public void setSelectedZaposleni(ArrayList<Zaposleni> selectedZaposleni) {
        this.selectedZaposleni = selectedZaposleni;
    }

    public ArrayList<Predmet> getPredmetList() {
        return predmetList;
    }

    public void setPredmetList(ArrayList<Predmet> predmetList) {
        this.predmetList = predmetList;
    }

    public String getSelectedPredmetString() {
        return selectedPredmetString;
    }

    public void setSelectedPredmetString(String selectedPredmetString) {
        this.selectedPredmetString = selectedPredmetString;
    }

    public Predmet getSelectedPredmet() {
        return selectedPredmet;
    }

    public void setSelectedPredmet(Predmet selectedPredmet) {
        this.selectedPredmet = selectedPredmet;
    }

    public Map<Zaposleni, String> getZaposleni() {
        return zaposleni;
    }

    public void setZaposleni(Map<Zaposleni, String> zaposleni) {
        this.zaposleni = zaposleni;
    }

    public Map<Predmet, String> getPredmeti() {
        return predmeti;
    }

    public void setPredmeti(Map<Predmet, String> predmeti) {
        this.predmeti = predmeti;
    }

    public String getGrupa() {
        return grupa;
    }

    public void setGrupa(String grupa) {
        this.grupa = grupa;
    }

    public boolean isImaPredmet() {
        return imaPredmet;
    }

    public void setImaPredmet(boolean imaPredmet) {
        this.imaPredmet = imaPredmet;
    }
    
    
    
}
